package com.haiheng.module_main.fragment

import android.annotation.SuppressLint
import android.app.ScansManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.haiheng.common.constant.RourePage
import com.haiheng.common.dialog.StandardDialog
import com.haiheng.common.fragment.RouterFragment
import com.haiheng.library.log.LogUtils
import com.haiheng.library_base.dialog.LoadingDialog
import com.haiheng.library_base.model.ApplicationViewModel
import com.haiheng.library_base.model.BaseViewModel
import com.haiheng.library_base.msg.MsgCode
import com.haiheng.library_base.msg.MsgEvent
import com.haiheng.library_base.toast.ToastUtils
import com.haiheng.library_base.utils.FastClickUtil
import com.haiheng.module_main.R
import com.haiheng.module_main.adapter.BookListAdapter
import com.haiheng.module_main.databinding.FragmentAlarmedBooksBinding
import com.haiheng.module_main.dialog.BookDetailDialog
import com.haiheng.module_main.mode.AlarmedBooksViewModel
import com.haiheng.module_main.mode.BookInfoViewModel
import kotlinx.coroutines.launch

/**
 *
 * @Des: 报警图书
 * @Author: hwz
 * @Date:2023/6/17 0017
 * @Version: 1.0
 */
class AlarmedBooksFragment: RouterFragment() {
    private lateinit var binding: FragmentAlarmedBooksBinding
    private val viewMode : BookInfoViewModel by viewModels()
    private lateinit var alarmedBooksViewModel: AlarmedBooksViewModel
    private val bookListAdapter = BookListAdapter()
    private var mScansManager: ScansManager? = null
    private lateinit var loadingDialog : LoadingDialog
    private var layerInfoSureDialog  : StandardDialog? = null


    private val observer = Observer<MsgEvent> { msgEvent ->
        onMessageChange(msgEvent)
    }
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentAlarmedBooksBinding.inflate(inflater, container, false)
        return binding.root
    }
    override fun initView() {
        alarmedBooksViewModel = AlarmedBooksViewModel(viewMode)
        loadingDialog = LoadingDialog(requireContext(), R.style.AvLoadingDialogStyle)
        binding.includeTile.tvTitle.setText("报警书目")
//        binding.includeBottom.btnSubmit.setText("报警")
        binding.includeTile.ivBack.setOnClickListener {
            activity.navigateUp()
        }
        binding.includeTile.cbRignt.isChecked = false
        binding.includeTile.cbRignt.setOnClickListener {
            binding.includeTile.cbRignt.isChecked = true
//            mScansManager?.startScan()
        }

        binding?.rvBookList?.layoutManager = LinearLayoutManager(activity)
        bookListAdapter.setPageType(RourePage.ALARMED_BOOKS.name)
        bookListAdapter.setHidenCheck(true)
        binding?.rvBookList?.adapter = bookListAdapter
//        binding.includeTile.cbRignt.visibility = View.GONE
        bookListAdapter.setOnItemClickListener(object : com.haiheng.library_base.adapter.BaseAdapter.OnItemClickListener{
            override fun onItemClick(
                holder: com.haiheng.library_base.adapter.BaseAdapter.ViewBindHolder,
                position: Int
            ) {
                BookDetailDialog.newInstance()
                    .setBookDetail(bookListAdapter.getItem(position))
                    .show(childFragmentManager)
            }
        })

    }

    override fun onResume() {
        super.onResume()
        observEven()
    }

    override fun onPause() {
        super.onPause()
        clearMsg()
        mScansManager?.stopScan()
    }

    override fun initViewModel(): BaseViewModel? {
        viewMode.bookListData.observe(viewLifecycleOwner){
            binding.tvBookNum.setText("数量：${it.size}")
            bookListAdapter.setNewData(it)

            var isAllSelet = true
            for (b in it){
                if (!b.isSelect){
                    isAllSelet = false
                    break
                }
            }
//            binding.includeBottom.cbAll.isChecked = isAllSelet
        }
        viewMode.showMsg.observe(viewLifecycleOwner){
            ToastUtils.showShort(it)
            loadingDialog.hide()
        }
        viewMode.layerInfo.observe(viewLifecycleOwner){
            var content = "层架号：${it.outValue} \n名称：${it.name}"
            var listener  = object : StandardDialog.OnDialogClickListener{
                override fun onConfirm(dialog: StandardDialog) {
                    binding.tvShelfNo.setText(it.name)
                    binding.includeTile.cbRignt.performClick()
                    dialog.dismiss()
                }

                override fun onCancel(dialog: StandardDialog) {
                    dialog.dismiss()
                }
            }
            if (layerInfoSureDialog == null){
                layerInfoSureDialog = StandardDialog.newInstance().setTitle(getString(R.string.hint_layer_no))
            }
            layerInfoSureDialog?.setOnDialogListener(listener)
            layerInfoSureDialog?.setContent(content)
            LogUtils.e("dddddddddd usAdd: ${layerInfoSureDialog?.isAdded}  isVisible:${layerInfoSureDialog?.isVisible}")
            if (!layerInfoSureDialog!!.isAdded){
                layerInfoSureDialog?.show(childFragmentManager)
            }

        }
        alarmedBooksViewModel._alarmedBooksData.observe(viewLifecycleOwner){
            alarmedBooksViewModel.uopdataAlarmedBooks()
        }

        viewMode._bookInfoByBarcode.observe(viewLifecycleOwner){ bookInfo->
            lifecycleScope.launch {
                val dataList = bookListAdapter.getData()
                dataList.forEach {
                    if (it.barCode.toString().equals(bookInfo.barCode)){
                        it.isSelect = true
                        it.isAlarmed = true
                        return@forEach
                    }
                }
//                dataList.sortWith(compareByDescending { it.isAlarmed })

                dataList.sortByDescending { it.isSelect }
                bookListAdapter.notifyDataSetChanged()
            }
        }
        return viewMode
    }

    private fun onMessageChange(msgEvent: MsgEvent?) {
        when (msgEvent?.code){
            MsgCode.MSG_SCANS_BARCODE->{
                if (FastClickUtil.isFaskMsg(msgEvent.msg,200)) return //两次相同消息太快这不处理
                if (layerInfoSureDialog?.isVisible == true) return
                if (binding.includeTile.cbRignt.isChecked){
                    viewMode.searchBookInfoByBarCode(msgEvent.msg)
                }
            }
        }
    }

    private fun observEven() {
        if (ApplicationViewModel.get().even != null) {
            if (ApplicationViewModel.get().even.hasObservers()) {
                ApplicationViewModel.get().even.removeObserver(observer)
            }
            ApplicationViewModel.get().even.observe(this,observer)
        }
    }
    fun clearMsg(){
        if (ApplicationViewModel.get().even != null) {
            if (ApplicationViewModel.get().even.hasObservers()) {
                ApplicationViewModel.get().even.removeObserver(observer)
            }
        }
    }

    @SuppressLint("WrongConstant")
    override fun initLoad() {
        var manager   = activity.getSystemService("scans")
        if (manager != null){
            mScansManager = manager as ScansManager
        }
        alarmedBooksViewModel.searchAlarmedBooks()

    }

}